package com.baizhi.action;

import java.io.File;
import java.util.UUID;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import com.baizhi.util.FTPUtils;

@Controller
@RequestMapping("/product")
public class ProductController {
	private Logger log = Logger.getLogger(ProductController.class);

	@RequestMapping("/add.do")
	public String add(@RequestParam("filePic") MultipartFile mf) throws Exception {
		System.out.println(mf + "======================================================");
		// 2. 创建FTP客户端工具对象。
		FTPClient ftp = new FTPClient();
		// 3. ftp客户端连接远程FTP服务器，url代表FTP服务器的ip地址，port代表ftp端口号，默认是21。
		ftp.connect("192.168.137.137", 21);
		// 4. 登陆FTP服务器，username和password分别是FTP服务器(CentOS系统)的用户名和密码。
		ftp.login("baizhi", "admins");
		// 5. 获得当前客户端对于FTP服务器的状态吗
		int replyCode = ftp.getReplyCode();
		// 6. 判断当前的状态吗是否可以使用FTP服务器。[官方文档上要求写上]
		if (!FTPReply.isPositiveCompletion(replyCode)) {
			ftp.disconnect();
			System.out.println("FTP服务器不可用异常");
		}
		// 7. 设置缓冲大小为1k
		ftp.setBufferSize(1024);
		// 8. 设置文件类型为二进制文件
		ftp.setFileType(FTP.BINARY_FILE_TYPE);
		// 9. 切换当前操作的目录
		ftp.changeWorkingDirectory("www/baizhi/images/");
		// 10. 将in输入流中的文件保存在FTP服务器的切换后的目录中，并且文件名为filename。
		String filename = mf.getOriginalFilename();
		filename = filename.substring(filename.lastIndexOf("."));
		filename = UUID.randomUUID().toString() + filename;
		log.info("上传到文件的文件名：" + filename);
		ftp.storeFile(filename, mf.getInputStream());//
		log.info("当前文件名" + mf.getName());
		log.info("文件类型：" + mf.getContentType());
		log.info("文件全名：" + mf.getOriginalFilename());
		mf.transferTo(new File("D:/" + mf.getName()));
		// ftp.storeFile(mf.getName(), new FileInputStream("D:/"+mf.getName()));
		// 11. 关闭输入流
		// 12. 退出登陆
		ftp.logout();
		// 13. 断开ftp客户端连接。
		if (ftp.isConnected()) {
			ftp.disconnect();
		}
		return "AddProduct";
	}

	@RequestMapping("/add2.do")
	public String add2(@RequestParam("filePic") MultipartFile mf) throws Exception {
		FTPClient ftp = FTPUtils.ftpLogin();
		// 10. 将in输入流中的文件保存在FTP服务器的切换后的目录中，并且文件名为filename。
		String filename = mf.getOriginalFilename();
		filename = filename.substring(filename.lastIndexOf("."));
		filename = UUID.randomUUID().toString() + filename;
		log.info("远程文件名1" + filename);

		FTPUtils.ftpUploadFile(ftp, filename, mf.getInputStream());
		filename = UUID.randomUUID().toString() + filename;
		log.info("远程文件名2" + filename);

		FTPUtils.ftpUploadFile(ftp, filename, mf.getInputStream());
		filename = UUID.randomUUID().toString() + filename;
		log.info("远程文件名3" + filename);

		FTPUtils.ftpUploadFile(ftp, filename, mf.getInputStream());
		filename = UUID.randomUUID().toString() + filename;
		log.info("远程文件名4" + filename);

		FTPUtils.ftpUploadFile(ftp, filename, mf.getInputStream());
		FTPUtils.commit(ftp);
		return "AddProduct";
	}
}
